home *** CD-ROM | disk | FTP | other *** search
/ internet.au CDrom 42 / NETCD42.iso / web / w95 / dream2.exe / data1.cab / Program_Files / Configuration / Behaviors / Actions / Drag Layer.js < prev    next >
Encoding:
JavaScript  |  1998-11-30  |  24.0 KB  |  615 lines

  1. // Copyright 1998 Macromedia, Inc. All rights reserved.
  2.  
  3. //*************** GLOBAL VARS  *****************
  4.  
  5. function initGlobals() {
  6.   CANBEAPPLIED = true;
  7.  
  8.   //Initial Form Values
  9.   GlayerMenu = 0;
  10.   GconstrainMenu = 0;
  11.   GconstrainUp = "";
  12.   GconstrainDown = "";
  13.   GconstrainLeft = "";
  14.   GconstrainRight = "";
  15.   GtargetLeft = "";
  16.   GtargetTop = "";
  17.   GtargetTolerance = "";
  18.  
  19.   GhandleMenu = 0;
  20.   GhandleLeft = "";
  21.   GhandleTop = "";
  22.   GhandleWidth = "";
  23.   GhandleHeight = "";
  24.   GbringToFront = true;
  25.   GdropBackMenu = 0;
  26.   GdragJavascript = "";
  27.   GdropJavascript = "";
  28.   GcallJsWhenSnapped = true;
  29. }
  30.  
  31. var CANBEAPPLIED;
  32. var GlayerMenu;
  33. var GconstrainMenu;
  34. var GconstrainUp;
  35. var GconstrainDown;
  36. var GconstrainLeft;
  37. var GconstrainRight;
  38. var GtargetLeft;
  39. var GtargetTop;
  40. var GtargetTolerance;
  41. var GhandleMenu;
  42. var GhandleLeft;
  43. var GhandleTop;
  44. var GhandleWidth;
  45. var GhandleHeight;
  46. var GbringToFront;
  47. var GdropBackMenu;
  48. var GdragJavascript;
  49. var GdropJavascript;
  50. var GcallJsWhenSnapped;
  51.  
  52. //******************* BEHAVIOR FUNCTION **********************
  53.  
  54. //Lets you drag a layer, snap it to a location, and call a JavaScript.
  55. //Accepts the following args:
  56. //  objStrNS - Javascript layer object ref for Netscape (ex: document.layers['foo'])
  57. //  objStrIE - JScript layer object ref for Internet Explorer (ex: document.all['foo'])
  58. //  hL, hT   - integers, define top-left corner of drag handle area within layer
  59. //  hW, hH   - positive integers, define width and height of drag handle area
  60. //             For example, to define a title-bar drag handle, use hL=0, hT=0, hW=100, hH=30
  61. //  toFront  - boolean, if true layer becomes topmost layer while dragged
  62. //  dropBack - boolean, (used only if toFront is true)
  63. //             if true, the layer will return to its original zIndex position when dropped
  64. //             if false, the layer will remain on top when dropped
  65. //  cU       - positive integer, distance layer can be dragged up from its original position
  66. //  cD       - positive integer, distance layer can be dragged down from its original position
  67. //  cL       - positive integer, distance layer can be dragged left from its original position
  68. //  cR       - positive integer, distance layer can be dragged right from its original position
  69. //  targL    - integer, absolute X location (from top/left corner of window) to snap to
  70. //  targT    - integer, absolute Y location (from top/left corner of window) to snap to
  71. //  tol      - tolerance, pixel-distance from target layer can be and still snap to target
  72. //  dropJS   - JavaScript to execute when snapped (can be blank, but use empty quotes "")
  73. //  et       - boolean "every time". if true, calls dropJS every time
  74. //                                   if false, only calls dropJS if snapped to target
  75. //  dragJS   - JavaScript to execute while dragging (can be blank, but use empty quotes "")
  76. //
  77. //This function requires layers and only works for 4.0 browsers. It is a composite of 4
  78. //functions, handling initialization, and events mousedown, mousemove, and mouseup.
  79. //For Netscape, use the first arg for the layer object reference.
  80. //For IE, use the second arg for the layer object ref.
  81. //Fails gracefully on older browsers by ensuring the .layers or .all arrays exist.
  82.  
  83. function MM_dragLayer(objNS,objIE,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS) { //v2.0
  84.   //Copyright 1998 Macromedia, Inc. All rights reserved.
  85.   var i,j,aLayer,retVal,curDrag=null,NS=(navigator.appName=='Netscape'), curLeft, curTop;
  86.   if (!document.all && !document.layers) return false;
  87.   retVal = true; if(!NS && event) event.returnValue = true;
  88.   if (MM_dragLayer.arguments.length > 1) {
  89.     curDrag = eval((NS)?objNS:objIE); if (!curDrag) return false;
  90.     if (!document.allLayers) {
  91.       document.allLayers = new Array();
  92.       with (document) {
  93.         if (NS) {
  94.           for (i=0; i<layers.length; i++) allLayers[i]=layers[i];
  95.           for (i=0; i<allLayers.length; i++) {
  96.             if (allLayers[i].document && allLayers[i].document.layers)
  97.               for (j=0; j<allLayers[i].document.layers.length; j++)
  98.                 allLayers[allLayers.length] = allLayers[i].document.layers[j];
  99.         } } else {
  100.           for (i=0; i<all.length; i++)
  101.             if (all[i].style != null && all[i].style.position)
  102.               allLayers[allLayers.length] = all[i];
  103.     } } }
  104.     curDrag.MM_dragOk=true; curDrag.MM_targL=targL; curDrag.MM_targT=targT;
  105.     curDrag.MM_tol=Math.pow(tol,2); curDrag.MM_hLeft=hL; curDrag.MM_hTop=hT;
  106.     curDrag.MM_hWidth=hW; curDrag.MM_hHeight=hH; curDrag.MM_toFront=toFront;
  107.     curDrag.MM_dropBack=dropBack; curDrag.MM_dropJS=dropJS;
  108.     curDrag.MM_everyTime=et; curDrag.MM_dragJS=dragJS;
  109.     curDrag.MM_oldZ = (NS)?curDrag.zIndex:curDrag.style.zIndex;
  110.     curLeft= (NS)?curDrag.left:curDrag.style.pixelLeft; curDrag.MM_startL = curLeft;
  111.     curTop = (NS)?curDrag.top:curDrag.style.pixelTop; curDrag.MM_startT = curTop;
  112.     curDrag.MM_bL=(cL<0)?null:curLeft-cL; curDrag.MM_bT=(cU<0)?null:curTop -cU;
  113.     curDrag.MM_bR=(cR<0)?null:curLeft+cR; curDrag.MM_bB=(cD<0)?null:curTop +cD;
  114.     curDrag.MM_LEFTRIGHT=0; curDrag.MM_UPDOWN=0; curDrag.MM_SNAPPED=false; //use in your JS!
  115.     document.onmousedown = MM_dragLayer; document.onmouseup = MM_dragLayer;
  116.     if (NS) document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
  117.   } else {
  118.     var theEvent = ((NS)?objNS.type:event.type);
  119.     if (theEvent == 'mousedown') {
  120.       var aLayer, maxDragZ=null;
  121.       var mouseX = (NS)?objNS.pageX : event.clientX + document.body.scrollLeft;
  122.       var mouseY = (NS)?objNS.pageY : event.clientY + document.body.scrollTop;
  123.       document.MM_maxZ = 0;
  124.       for (i=0; i<document.allLayers.length; i++) {
  125.         aLayer = document.allLayers[i];
  126.         var aLayerZ = (NS)?aLayer.zIndex:aLayer.style.zIndex;
  127.         if (aLayerZ > document.MM_maxZ) document.MM_maxZ = aLayerZ;
  128.         var isVisible = (((NS)?aLayer.visibility:aLayer.style.visibility).indexOf('hid') == -1);
  129.         if (aLayer.MM_dragOk != null && isVisible) with (aLayer) {
  130.           var parentL=0; var parentT=0;
  131.           if (!NS) { 
  132.             parentLayer = aLayer.parentElement;
  133.             while (parentLayer != null && parentLayer.style.position) {
  134.               parentL += parentLayer.offsetLeft;
  135.               parentT += parentLayer.offsetTop;
  136.               parentLayer = parentLayer.parentElement;
  137.           } }
  138.           var tmpX=mouseX-(((NS)?pageX:style.pixelLeft+parentL)+MM_hLeft);
  139.           var tmpY=mouseY-(((NS)?pageY:style.pixelTop +parentT)+MM_hTop);
  140.           var tmpW = MM_hWidth;  if (tmpW <= 0) tmpW += ((NS)?clip.width :offsetWidth);
  141.           var tmpH = MM_hHeight; if (tmpH <= 0) tmpH += ((NS)?clip.height:offsetHeight);
  142.           if ((0 <= tmpX && tmpX < tmpW && 0 <= tmpY && tmpY < tmpH) &&
  143.              (maxDragZ == null || maxDragZ <= aLayerZ)) {
  144.             curDrag = aLayer; maxDragZ = aLayerZ;
  145.       } } }
  146.       if (curDrag) {
  147.         document.onmousemove = MM_dragLayer; 
  148.         if (NS) document.captureEvents(Event.MOUSEMOVE);
  149.         curLeft = (NS)?curDrag.left:curDrag.style.pixelLeft;
  150.         curTop = (NS)?curDrag.top:curDrag.style.pixelTop;
  151.         MM_oldX = mouseX - curLeft; MM_oldY = mouseY - curTop;
  152.         document.MM_curDrag = curDrag;  curDrag.MM_SNAPPED=false;
  153.         if(curDrag.MM_toFront) {
  154.           eval('curDrag.'+((NS)?'':'style.')+'zIndex=document.MM_maxZ+1');
  155.           if (!curDrag.MM_dropBack) document.MM_maxZ++;
  156.         }
  157.         retVal = false; if(!NS) event.returnValue = false;
  158.     } } else if (theEvent == 'mousemove') {
  159.       if (document.MM_curDrag) with (document.MM_curDrag) {
  160.         var mouseX = (NS)?objNS.pageX : event.clientX + document.body.scrollLeft;
  161.         var mouseY = (NS)?objNS.pageY : event.clientY + document.body.scrollTop;
  162.         newLeft = mouseX-MM_oldX; newTop  = mouseY-MM_oldY;
  163.         if (MM_bL!=null) newLeft = Math.max(newLeft,MM_bL);
  164.         if (MM_bR!=null) newLeft = Math.min(newLeft,MM_bR);
  165.         if (MM_bT!=null) newTop  = Math.max(newTop ,MM_bT);
  166.         if (MM_bB!=null) newTop  = Math.min(newTop ,MM_bB);
  167.         MM_LEFTRIGHT = newLeft-MM_startL; MM_UPDOWN = newTop-MM_startT;
  168.         if (NS) {left = newLeft; top = newTop;}
  169.         else {style.pixelLeft = newLeft; style.pixelTop = newTop;}
  170.         if (MM_dragJS) eval(MM_dragJS);
  171.         retVal = false; if(!NS) event.returnValue = false;
  172.     } } else if (theEvent == 'mouseup') {
  173.       document.onmousemove = null;
  174.       if (NS) document.releaseEvents(Event.MOUSEMOVE);
  175.       if (NS) document.captureEvents(Event.MOUSEDOWN); //for mac NS
  176.       if (document.MM_curDrag) with (document.MM_curDrag) {
  177.         if (typeof MM_targL =='number' && typeof MM_targT == 'number' &&
  178.             (Math.pow(MM_targL-((NS)?left:style.pixelLeft),2)+
  179.              Math.pow(MM_targT-((NS)?top:style.pixelTop),2))<=MM_tol) {
  180.           if (NS) {left = MM_targL; top = MM_targT;}
  181.           else {style.pixelLeft = MM_targL; style.pixelTop = MM_targT;}
  182.           MM_SNAPPED = true; MM_LEFTRIGHT = MM_startL-MM_targL;
  183.           MM_UPDOWN = MM_startT-MM_targT;
  184.         }
  185.         if (MM_everyTime || MM_SNAPPED) eval(MM_dropJS);
  186.         if(MM_dropBack) {if (NS) zIndex = MM_oldZ; else style.zIndex = MM_oldZ;}
  187.         retVal = false; if(!NS) event.returnValue = false;
  188.       } 
  189.       document.MM_curDrag = null;
  190.     }
  191.     if (NS) document.routeEvent(objNS);
  192.   }
  193.   return retVal;
  194. }
  195.  
  196.  
  197. //******************* API **********************
  198.  
  199. //Checks for the existence of layers.
  200. //If none exist, returns false so this Action is grayed out.
  201.  
  202. function canAcceptBehavior(theTag,theEvent) {
  203.   var nameArray = getObjectRefs("NS 4.0","document","LAYER");  //get layer names (includes CSS)
  204.   return (nameArray.length > 0);
  205. }
  206.  
  207.  
  208.  
  209. //Returns a Javascript function to be inserted in HTML head with script tags.
  210.  
  211. function behaviorFunction(){
  212.   return "MM_dragLayer";
  213. }
  214.  
  215.  
  216.  
  217. //Returns fn call to insert in HTML tag <TAG... onEvent='thisFn(arg)'>
  218.  
  219. function applyBehavior() {
  220.   var objNS,objIE,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS;
  221.  
  222.   var index, errMsg="", argList="";
  223.  
  224.   if (CANBEAPPLIED) {
  225.     if (findObject("mainLayer").visibility != 'hidden') {
  226.       getMain();
  227.     } else {
  228.       getOptions();
  229.     }
  230.     //get layer obj
  231.     index = GlayerMenu;
  232.     objNS = document.MM_NS_REFS[index]; //get layer name from list
  233.     objIE = document.MM_IE_REFS[index];
  234.     if (objNS.indexOf(REF_UNNAMED) == 0) errMsg += "\n"+MSG_UnnamedLayer;
  235.     argList += "'"+escQuotes(objNS)+"','"+escQuotes(objIE)+"',";
  236.  
  237.     //get drag handle
  238.     if (GhandleMenu == 0) {
  239.       hL=0; hT=0; hW=0; hH=0;
  240.     } else {
  241.       hL = GhandleLeft;   if (!hL) hL = 0; //if empty, use zero
  242.       hT = GhandleTop;    if (!hT) hT = 0;
  243.       hW = GhandleWidth;  if (!hW) hW = 0;
  244.       hH = GhandleHeight; if (!hH) hH = 0;
  245.       if ((hL != ""+(parseInt(hL))) ||  //if not a number
  246.           (hT != ""+(parseInt(hT))) ||
  247.           (hW != ""+(parseInt(hW))) ||
  248.           (hH != ""+(parseInt(hH)))) errMsg += "\n"+MSG_HandleNotInts;
  249.     }
  250.     argList += hL + "," + hT + "," + hW + "," + hH + ",";
  251.  
  252.     //get while-dragging setting
  253.     toFront = GbringToFront;
  254.     index = GdropBackMenu;
  255.     dropBack = (index == 1);
  256.     argList += toFront + "," + dropBack + ",";
  257.  
  258.     //get constraints
  259.     if (GconstrainMenu == 0) {
  260.       cU=-1; cD=-1; cL=-1; cR=-1;
  261.     } else {
  262.       cU = GconstrainUp;
  263.       cD = GconstrainDown;
  264.       cL = GconstrainLeft;
  265.       cR = GconstrainRight;
  266.       if ((cU && cU != ""+(parseInt(cU))) ||  //if not a number
  267.           (cD && cD != ""+(parseInt(cD))) ||
  268.           (cL && cL != ""+(parseInt(cL))) ||
  269.           (cR && cR != ""+(parseInt(cR)))) errMsg += "\n"+MSG_ConstraintsNotInts;
  270.       if ((cU == ""+(parseInt(cU)) && cU < 0) ||  //if number, but negative
  271.           (cD == ""+(parseInt(cD)) && cD < 0) ||
  272.           (cL == ""+(parseInt(cL)) && cL < 0) ||
  273.           (cR == ""+(parseInt(cR)) && cR < 0)) errMsg += "\n"+MSG_ConstraintsNotPos;
  274.     }
  275.     if (!cU) cU = -1;
  276.     if (!cD) cD = -1;
  277.     if (!cL) cL = -1;
  278.     if (!cR) cR = -1;
  279.     argList += cU + "," + cD + "," + cL + "," + cR + ",";
  280.  
  281.     //get target location and tolerance
  282.     targL = GtargetLeft;
  283.     targT = GtargetTop;
  284.     tol   = GtargetTolerance;
  285.     if ((targL && targL != ""+(parseInt(targL))) ||   //if not empty, and not number
  286.         (targT && targT != ""+(parseInt(targT))) ||
  287.         (tol   && tol   != ""+(parseInt(tol)))) errMsg += "\n"+MSG_TargetNotInts;
  288.     if (tol && tol == ""+(parseInt(tol)) && tol < 0) errMsg += "\n"+MSG_TolNotPositive;
  289.     targL = (targL)?targL:false; //if its empty, use false
  290.     targT = (targT)?targT:false;
  291.     tol   = (tol  )?tol  :0; //if empty, use zero
  292.     argList += targL + "," + targT + "," + tol + ",";
  293.  
  294.     //get javascript
  295.     dropJS = escQuotes(GdropJavascript);
  296.     et = !GcallJsWhenSnapped;
  297.     dragJS = escQuotes(GdragJavascript);
  298.     argList += "'" + dropJS + "'," + et + ",'" + dragJS + "'";
  299.  
  300.     if (errMsg) return errMsg
  301.     else return "MM_dragLayer("+argList+")";  //return fn call with args
  302.   } else {
  303.     return MSG_InvalidEvent;
  304.   }
  305. }
  306.  
  307.  
  308.  
  309. //Returns a dummy function call to inform Dreamweaver the type of certain behavior
  310. //call arguments. This information is used by DW to fixup behavior args when the
  311. //document is moved or changed.
  312. //
  313. //It is passed an actual function call string generated by applyBehavior(), which
  314. //may have a variable list of arguments, and this should return a matching mask.
  315. //
  316. //The return values are:
  317. //  URL     : argument could be a file path, which DW will update during Save As...
  318. //  NS4.0ref: arg is an object ref that may be changed by Convert Tables to Layers
  319. //  IE4.0ref: arg is an object ref that may be changed by Convert Tables to Layers
  320. //  other...: argument is ignored
  321.  
  322. function identifyBehaviorArguments(fnCallStr) {
  323.   var argArray;
  324.  
  325.   argArray = extractArgs(fnCallStr);
  326.   if (argArray.length == 7) {
  327.     return "NS4.0ref,IE4.0ref,other,other,other,other";
  328.   } else {
  329.     return "";
  330.   }
  331. }
  332.  
  333.  
  334.  
  335. //Given the original function call, this parses out the args and updates
  336. //the UI. All values are written to a set of globals, then some are written
  337. //to the displayed form.
  338.  
  339. function inspectBehavior(fnStr){
  340.   var argArray,found,numLayers,i;
  341.   var objNS,objIE,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS;
  342.  
  343.   argArray = extractArgs(fnStr);//get new list of layer,vis pairs
  344.   if (argArray.length > 16 && CANBEAPPLIED) { //function call + 16 args
  345.  
  346.     //set layer obj
  347.     objNS=unescQuotes(argArray[1]);
  348.     objIE=unescQuotes(argArray[2]);
  349.     found = false;
  350.     numLayers = document.MM_NS_REFS.length;
  351.     for (i=0; i<numLayers; i++){  //check if layer is in menu
  352.       if ((objNS && document.MM_NS_REFS[i] == objNS) || 
  353.           (objIE && document.MM_IE_REFS[i] == objIE)) { //if layer there
  354.         GlayerMenu = i;
  355.         found = true;
  356.         break;
  357.       }
  358.     }
  359.     if (!found) alert(errMsg(MSG_LayerNotFound,objNS));
  360.  
  361.     //set drag handle
  362.     hL = argArray[3];
  363.     hT = argArray[4];
  364.     hW = argArray[5];
  365.     hH = argArray[6];
  366.     if (hL==0 && hT==0 && hW==0 && hH==0) {
  367.       GhandleMenu = 0;
  368.     } else {
  369.       GhandleMenu   = 1;
  370.       GhandleLeft   = (hL==0)?"":hL;
  371.       GhandleTop    = (hT==0)?"":hT;
  372.       GhandleWidth  = (hW==0)?"":hW;
  373.       GhandleHeight = (hH==0)?"":hH;
  374.     }
  375.  
  376.     //set while-dragging settings
  377.     GbringToFront = (argArray[7]=='true')?true:false;
  378.     GdropBackMenu = (argArray[8]=='true')?1:0;
  379.  
  380.     //set constraints
  381.     cU = argArray[9];
  382.     cD = argArray[10];
  383.     cL = argArray[11];
  384.     cR = argArray[12];
  385.     if (cU == -1 && cD == -1 && cL == -1 && cD == -1) {
  386.       GconstrainMenu = 0;
  387.     } else {
  388.       GconstrainMenu = 1;
  389.       if (cU != -1) GconstrainUp    = cU;
  390.       if (cD != -1) GconstrainDown  = cD;
  391.       if (cL != -1) GconstrainLeft  = cL;
  392.       if (cR != -1) GconstrainRight = cR;
  393.     }
  394.  
  395.     //set target location and tolerance
  396.     GtargetLeft = (argArray[13]=="false")?"":argArray[13];
  397.     GtargetTop  = (argArray[14]=="false")?"":argArray[14];
  398.     GtargetTolerance = (argArray[15]==0)?"":argArray[15];
  399.     
  400.     //set javascript
  401.     GdropJavascript = argArray[16];
  402.     if (argArray.length > 17) //function call + 17 args
  403.       GcallJsWhenSnapped = !eval(argArray[17]);
  404.     if (argArray.length > 18) //function call + 18 args
  405.       GdragJavascript = argArray[18];
  406.  
  407.     displayMain();  //write values to form
  408.   }
  409. }
  410.  
  411.  
  412.  
  413. //***************** LOCAL FUNCTIONS  ******************
  414.  
  415.  
  416. //Detects if the onmousedown event is selected, which makes it invalid to proceed.
  417. //Searches for the layer surround the current selection. If match is found,
  418. //displays and loads the main form with all the layer "nice names", and selects
  419. //the current one. If anything fails, it displays the error layer.
  420.  
  421. function initializeUI(){
  422.   initGlobals();
  423.   var theEvent,nsRefs,ieRefs,tags,niceNameSrcArray,nameArray,i,j,tagTokenArray,numLayers;
  424.   
  425.   theEvent = dreamweaver.getBehaviorEvent().toLowerCase();
  426.   CANBEAPPLIED = (theEvent != "onmousedown" && theEvent != "onmousemove");
  427.   if (CANBEAPPLIED) {
  428.       document.MM_NS_REFS = new Array();
  429.       document.MM_IE_REFS = new Array();
  430.       document.MM_TAGS    = new Array();
  431.       nsRefs = getObjectRefs("NS 4.0","document","LAYER"); //store parallel NS refs
  432.       ieRefs = getObjectRefs("IE 4.0","document","LAYER"); //store parallel IE refs
  433.       tags   = getObjectTags("document","LAYER"); //store parallel tags
  434.  
  435.       //remove ILAYERs if any while copying all refs into global arrays
  436.       j = 0;
  437.       for (i=0; i<tags.length; i++) {
  438.         tagTokenArray = getTokens(tags[i],"< ");
  439.         if (tagTokenArray[0].toUpperCase()!="ILAYER") { //if layer's not an ILAYER
  440.           document.MM_NS_REFS[j] = nsRefs[i];
  441.           document.MM_IE_REFS[j] = ieRefs[i];
  442.           document.MM_TAGS[j++]  = tags[i];
  443.         }
  444.       }      
  445.  
  446.       //Search for unreferenceable objects. <DIV id="foo"> is IE only, <LAYER> is NS only.
  447.       //if REF_CANNOT found, return empty string, and use IE refs for nice namelist.
  448.       niceNameSrcArray = document.MM_NS_REFS;
  449.       for (i=0; i<document.MM_NS_REFS.length; i++) {
  450.         if (document.MM_IE_REFS[i].indexOf(REF_CANNOT) == 0) {
  451.           document.MM_IE_REFS[i] = ""; //blank it out
  452.         }
  453.         if (document.MM_NS_REFS[i].indexOf(REF_CANNOT) == 0) {
  454.           document.MM_NS_REFS[i] = ""; //blank it out
  455.           niceNameSrcArray = document.MM_IE_REFS; //use the IE list
  456.         }
  457.       }
  458.       nameArray = niceNames(niceNameSrcArray,TYPE_Layer);  //get layer names (includes CSS)
  459.  
  460.       findObject("mainLayer").visibility = "visible";
  461.       with (findObject("layerMenu")) {
  462.         for (i=0; i<nameArray.length; i++) options[i]=new Option(nameArray[i]); //load menu
  463.         selectedIndex = 0;
  464.       }
  465.   } else {
  466.     findObject("mainLayer").visibility = "hidden";
  467.     findObject('ErrMsgLayer').visibility = 'visible';
  468.   }
  469. }
  470.  
  471.  
  472.  
  473. //Scan the tag for the selected layer to get it's current left,top position
  474. //Put these position values into the form
  475.  
  476. function getLayerPosition() {
  477.   var index,layerTag,layerTokens,i,topVal='',leftVal='';
  478.  
  479.     index = findObject("layerMenu").selectedIndex;
  480.     layerTag = document.MM_TAGS[index].toLowerCase(); //get layer tag from list
  481.     if (layerTag) {
  482.  
  483.       //search layer tag for 'left' and 'top' attributes
  484.       layerTokens = dreamweaver.getTokens(layerTag,"=;:\"\' ");
  485.       for (i=0; i<(layerTokens.length-1); i++) {  //search for 'left' value
  486.         if (layerTokens[i] == "left") {
  487.           leftVal = layerTokens[i+1];
  488.           break;
  489.       } }
  490.       for (i=0; i<(layerTokens.length-1); i++) {  //search for 'top' value
  491.         if (layerTokens[i] == "top") {
  492.           topVal = layerTokens[i+1];
  493.           break;
  494.       } }
  495.  
  496.       //if followed by "px", strip off
  497.       if (leftVal.substring(leftVal.length-2,leftVal.length)=="px")
  498.         leftVal = leftVal.substring(0,leftVal.length-2); //remove px if there
  499.       if (topVal.substring(topVal.length-2,topVal.length)=="px")
  500.         topVal = topVal.substring(0,topVal.length-2); //remove px if there
  501.  
  502.       //if valid integers, insert in form
  503.       if (leftVal == ""+parseInt(leftVal) && topVal == ""+parseInt(topVal)) {
  504.         findObject("targetLeft").value = leftVal;
  505.         findObject("targetTop").value = topVal;
  506.       }
  507.     }
  508.  
  509.     //add default tolerance if nothing there
  510.     with (findObject("targetTolerance")) if (!value) value = 50;
  511.  
  512. }
  513.  
  514.  
  515.  
  516. function displayMain() {
  517.   if (findObject("optionsLayer").visibility != 'hidden') {
  518.     getOptions();
  519.     findObject("optionsLayer").visibility = 'hidden';
  520.   }
  521.   findObject("handleLayer").visibility = 'hidden';
  522.   findObject("mainLayer").visibility = 'visible';
  523.   if (GconstrainMenu > 0) //if menu options selected, show layer
  524.     findObject("constrainLayer").visibility = 'visible';
  525.   setMain();
  526. }
  527.  
  528.  
  529.  
  530. function displayOptions() {
  531.   if (findObject("mainLayer").visibility != 'hidden') {
  532.     getMain();
  533.     findObject("mainLayer").visibility = 'hidden';
  534.   }
  535.   findObject("constrainLayer").visibility = 'hidden';
  536.   findObject("optionsLayer").visibility = 'visible';
  537.   if (GhandleMenu > 0) //if menu options selected, show layer
  538.     findObject("handleLayer").visibility = 'visible';
  539.   setOptions();
  540. }
  541.  
  542.  
  543.  
  544. function displayHandle(index) {
  545.   findObject("handleLayer").visibility = ((index == 1)?'visible':'hidden');
  546. }
  547.  
  548.  
  549.  
  550. function displayConstraints(index) {
  551.   findObject("constrainLayer").visibility = ((index == 1)?'visible':'hidden');
  552. }
  553.  
  554.  
  555.  
  556. function getMain() {
  557.   GlayerMenu       = findObject("layerMenu").selectedIndex;
  558.   GconstrainMenu   = findObject("constrainMenu").selectedIndex;
  559.   GconstrainUp     = findObject("constrainUp").value;
  560.   GconstrainDown   = findObject("constrainDown").value;
  561.   GconstrainLeft   = findObject("constrainLeft").value;
  562.   GconstrainRight  = findObject("constrainRight").value;
  563.   GtargetLeft      = findObject("targetLeft").value;
  564.   GtargetTop       = findObject("targetTop").value;
  565.   GtargetTolerance = findObject("targetTolerance").value;
  566. }
  567. function setMain() {
  568.  findObject("layerMenu").selectedIndex     = GlayerMenu;
  569.  findObject("constrainMenu").selectedIndex = GconstrainMenu;
  570.  findObject("constrainUp").value           = GconstrainUp;
  571.  findObject("constrainDown").value         = GconstrainDown;
  572.  findObject("constrainLeft").value         = GconstrainLeft;
  573.  findObject("constrainRight").value        = GconstrainRight;
  574.  findObject("targetLeft").value            = GtargetLeft;
  575.  findObject("targetTop").value             = GtargetTop;
  576.  findObject("targetTolerance").value       = GtargetTolerance;
  577. }
  578. function getOptions() {
  579.   GhandleMenu      = findObject("handleMenu").selectedIndex;
  580.   GhandleLeft      = findObject("handleLeft").value;
  581.   GhandleTop       = findObject("handleTop").value;
  582.   GhandleWidth     = findObject("handleWidth").value;
  583.   GhandleHeight    = findObject("handleHeight").value;
  584.   GbringToFront    = findObject("bringToFront").checked;
  585.   GdropBackMenu    = findObject("dropBackMenu").selectedIndex;
  586.   GdragJavascript  = findObject("dragJavascript").value;
  587.   GdropJavascript  = findObject("dropJavascript").value;
  588.   GcallJsWhenSnapped = findObject("callJsWhenSnapped").checked;
  589. }
  590. function setOptions() {
  591.  findObject("handleMenu").selectedIndex   = GhandleMenu;
  592.  findObject("handleLeft").value           = GhandleLeft;
  593.  findObject("handleTop").value            = GhandleTop;
  594.  findObject("handleWidth").value          = GhandleWidth;
  595.  findObject("handleHeight").value         = GhandleHeight;
  596.  findObject("bringToFront").checked       = GbringToFront;
  597.  findObject("dropBackMenu").selectedIndex = GdropBackMenu;
  598.  findObject("dragJavascript").value       = GdragJavascript;
  599.  findObject("dropJavascript").value       = GdropJavascript;
  600.  findObject("callJsWhenSnapped").checked  = GcallJsWhenSnapped;
  601. }
  602.  
  603.  
  604. //**************** GENERIC FUNCTIONS ****************
  605.  
  606. //function extractArgs(behFnCallStr){
  607. //function escQuotes(theStr){
  608. //function unescQuotes(theStr){
  609. //function niceNames(objRefArray,objTypeStr) {
  610. //function nameReduce (objName) {
  611. //function errMsg() {
  612. //function findObject(objName,  parentObj) {
  613.  
  614.  
  615.